草庐IT

C++ std::atomic 与 Boost atomic

全部标签

c++ - 复制 std::ofstream 追加内容

我正在使用std::ofstream进行跟踪输出。出于某些原因,有时我想将附加在std::ofstream末尾(尚未刷新或关闭)的内容复制到另一个std::ofstream中;您有什么办法可以实现吗?谢谢 最佳答案 Tee从Boost.Iostreams过滤可以将输出流分成两部分。这是一个深受JohannesSchaub给出的启发的例子在他的回答中here.#include#include#include#includeintmain(){namespaceio=boost::iostreams;typedefio::tee_dev

c++ - 将 C++0x 的 atomic<int> 作为非原子访问

我的程序中有一个atomic类型的原子变量.在某些地方,我不需要以原子方式访问其中的值,因为我只检查它是否为0。换句话说,在那些情况下,我想避免在有原子访问时发生的总线锁定等开销。如何以非原子方式访问原子变量。使用(int)对其进行类型转换是否足够,如下所示?如果不是,我想我该怎么做?atomicatm;intx;........x=(int)atm;//Wouldthisbeanon-atomicaccess,nobuslockingetall? 最佳答案 您无法摆脱原子性属性。但是您可以通过放宽内存排序保证来减少使用原子变量所涉

c++ - solaris (x86) 上std::basic_string 的一些疑惑

solaris(x86)上std::basic_string的一些困惑#include#includeintmain(){constwchar_t*s=L"abcdef";std::wstringws(s,s+6);for(inti=0;i运行结果为:9799101000为什么不是979899100101102代码#include#includeintmain(){constwchar_t*s=L"abcdef";std::wstringws;ws.resize(6);for(inti=0;i可以得到预期的结果。我使用gcc3.4.6,构建命令是g++-fshort-wcharstri

c++ - std::bad_alloc 之后 std::vector 的状态

我试图找到一个在线引用来查看几个标准容器的异常安全性。在std::vector的情况下,它是否保持push_back调用之前的状态?我假设vector的所有对象仍然有效(没有调用析构函数)。在push_back抛出std::bad_alloc异常后,提供什么保证std::vector? 最佳答案 如果它抛出,vector不会改变。甚至不是capacity()。根据[container.requirements.general]:Unlessotherwisespecified(see23.2.4.1,23.2.5.1,23.3.3.

c++ - std::call_once 和内存重新排序

给定来自here的代码:classlazy_init{mutablestd::once_flagflag;mutablestd::unique_ptrdata;voiddo_init()const{data.reset(newexpensive_data);}public:expensive_dataconst&get_data()const{std::call_once(flag,&lazy_init::do_init,this);return*data;}};我在其他地方也看到了相同模式的一些变体。所以我的问题是:为什么这段代码被认为是保存的?以及为什么编译器不能在调用std::c

c++ - std::unique_ptr<T> 不完整类型错误

我有templateclassqueue{private:structnode{Tdata;std::unique_ptrnext;//compileerroronincompletetypenode(T&&data_):data(std::move(data_)){}};std::unique_ptrhead;node*tail;public:queue():tail(nullptr){}我在VS10的标记行上遇到编译错误。在这种情况下,我是否应该被允许使用不完整的类型(实例化模板-构造函数-这里以int为例)?有解决方法吗?编辑singlethreadedqueue.h(62):e

c++ - 命名空间 std 中所有符号的列表

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭6年前。Improvethisquestion我在哪里可以找到在命名空间std中声明的所有符号的列表?实在找不到,不知道去哪里找。

c++ - 在 WaitForMultipleObjects() 中使用 std::vector

我有一个句柄对象的std::vector。我必须等待这些句柄对象才能在WaitForMultipleObjects函数中使用。因为它是一个vector,所以在WaitForMultipleObjects中使用它时出现错误:std::vectorevents;//...WaitForMultipleObjects(events.size(),events,true,INFINITE);有什么办法吗? 最佳答案 最好,如果你有最新版本的STL,你应该使用:WaitForMultipleObjects(events.size(),even

c++ - boost::atomic 的 header 是什么

我想使用boost::atomic但要包含什么header?没有boost/atomic.hpp 最佳答案 Boost.Atomic目前还不是boost的官方部分。如果您仍想使用它,则需要从here获取它。.或者你可以试试Boost.Interprocess对于原子操作,依赖编译器相关扩展,如gccs原子操作(__sync_val_compare_and_swap等),或者,如果c++11是一个选项,请使用std::atomic,这几乎与boost::atomic相同IIRC.编辑:一如既往,这些事情发生了变化:Boost.Atom

c++ - std::runtime_error 子类的 "call to deleted constructor of"编译器错误

我从std::runtime_error派生了一个异常类,以便添加对异常流的支持。我收到一个奇怪的编译器错误输出,我不确定如何解决?clang++-std=c++11-stdlib=libc++-g-Wall-I../-I/usr/local/includeMain.cpp-cMain.cpp:43:19:error:calltodeletedconstructorof'EarthException'throwEarthException(__FILE__,__LINE__)^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~../EarthExce